/**
 * Redux Store 配置
 * 负责配置全局状态管理和数据持久化
 * 
 * 功能说明：
 * - 使用Redux Toolkit简化状态管理配置
 * - 使用redux-persist实现状态持久化
 * - 配置多个业务模块的状态切片
 * - 支持开发环境调试工具
 * 
 * @author 项目开发团队
 * @version 1.0.0
 */

import { configureStore } from '@reduxjs/toolkit'
import { persistStore, persistReducer } from 'redux-persist'
import storage from 'redux-persist/lib/storage'
import { combineReducers } from 'redux'

// ==================== 导入各个状态切片 ====================
// 每个slice负责管理特定业务模块的状态
import ordersReducer from './slices/ordersSlice'    // 订单相关状态
import userReducer from './slices/userSlice'        // 用户相关状态
import chatReducer from './slices/chatSlice'        // 聊天相关状态
import paymentReducer from './slices/paymentSlice'  // 支付相关状态
import authReducer from './slices/authSlice'        // 认证相关状态

/**
 * 持久化配置
 * 定义哪些状态需要持久化到localStorage
 */
const persistConfig = {
  key: 'root',                    // 存储的key前缀
  storage,                        // 使用localStorage作为存储引擎
  whitelist: ['user', 'chat', 'orders', 'payment', 'auth'], // 需要持久化的reducer列表
  blacklist: []                   // 不需要持久化的reducer列表（当前为空）
}

/**
 * 合并所有reducer
 * 将各个业务模块的reducer合并为根reducer
 */
const rootReducer = combineReducers({
  orders: ordersReducer,    // 订单状态管理
  user: userReducer,        // 用户状态管理
  chat: chatReducer,        // 聊天状态管理
  payment: paymentReducer,  // 支付状态管理
  auth: authReducer,        // 认证状态管理
})

/**
 * 创建持久化reducer
 * 将根reducer包装为支持持久化的reducer
 */
const persistedReducer = persistReducer(persistConfig, rootReducer)

/**
 * 创建Redux Store
 * 配置全局状态存储
 */
export const store = configureStore({
  reducer: persistedReducer,  // 使用持久化的reducer
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      // 配置序列化检查，忽略redux-persist的action
      serializableCheck: {
        ignoredActions: ['persist/PERSIST', 'persist/REHYDRATE'],
      },
    }),
  devTools: true,  // 启用Redux DevTools（开发环境）
})

/**
 * 创建持久化存储实例
 * 用于在应用启动时恢复持久化的状态
 */
export const persistor = persistStore(store)
